Let GtkGizmo override the contains() implementation.
Update all callers to pass NULL for the contains_func.
GTK_WIDGET_CLASS (gtk_gizmo_parent_class)->snapshot (widget, snapshot);
}
+static gboolean
+gtk_gizmo_contains (GtkWidget *widget,
+ double x,
+ double y)
+{
+ GtkGizmo *self = GTK_GIZMO (widget);
+
+ if (self->contains_func)
+ return self->contains_func (self, x, y);
+ else
+ return GTK_WIDGET_CLASS (gtk_gizmo_parent_class)->contains (widget, x, y);
+}
+
static void
gtk_gizmo_finalize (GObject *object)
{
widget_class->measure = gtk_gizmo_measure;
widget_class->size_allocate = gtk_gizmo_size_allocate;
widget_class->snapshot = gtk_gizmo_snapshot;
+ widget_class->contains = gtk_gizmo_contains;
}
static void
gtk_gizmo_new (const char *css_name,
GtkGizmoMeasureFunc measure_func,
GtkGizmoAllocateFunc allocate_func,
- GtkGizmoSnapshotFunc snapshot_func)
+ GtkGizmoSnapshotFunc snapshot_func,
+ GtkGizmoContainsFunc contains_func)
{
GtkGizmo *gizmo = GTK_GIZMO (g_object_new (GTK_TYPE_GIZMO,
"css-name", css_name,
gizmo->measure_func = measure_func;
gizmo->allocate_func = allocate_func;
gizmo->snapshot_func = snapshot_func;
+ gizmo->contains_func = contains_func;
return GTK_WIDGET (gizmo);
}
int baseline);
typedef void (* GtkGizmoSnapshotFunc) (GtkGizmo *gizmo,
GtkSnapshot *snapshot);
-
+typedef gboolean (* GtkGizmoContainsFunc) (GtkGizmo *gizmo,
+ double x,
+ double y);
struct _GtkGizmo
{
GtkGizmoMeasureFunc measure_func;
GtkGizmoAllocateFunc allocate_func;
GtkGizmoSnapshotFunc snapshot_func;
+ GtkGizmoContainsFunc contains_func;
};
struct _GtkGizmoClass
GtkWidget *gtk_gizmo_new (const char *css_name,
GtkGizmoMeasureFunc measure_func,
GtkGizmoAllocateFunc allocate_func,
- GtkGizmoSnapshotFunc snapshot_func);
+ GtkGizmoSnapshotFunc snapshot_func,
+ GtkGizmoContainsFunc contains_func);
#endif
priv->block_widget = g_renew (GtkWidget*, priv->block_widget, n_blocks);
for (i = priv->n_blocks; i < n_blocks; i++)
{
- priv->block_widget[i] = gtk_gizmo_new ("block", NULL, NULL, NULL);
+ priv->block_widget[i] = gtk_gizmo_new ("block", NULL, NULL, NULL, NULL);
gtk_widget_insert_before (priv->block_widget[i], GTK_WIDGET (priv->trough_widget), NULL);
}
priv->n_blocks = n_blocks;
priv->trough_widget = gtk_gizmo_new ("trough",
gtk_level_bar_measure_trough,
gtk_level_bar_allocate_trough,
- gtk_level_bar_render_trough);
+ gtk_level_bar_render_trough,
+ NULL);
gtk_widget_set_parent (priv->trough_widget, GTK_WIDGET (self));
gtk_level_bar_ensure_offset (self, GTK_LEVEL_BAR_OFFSET_LOW, 0.25);
priv->tabs_widget = gtk_gizmo_new ("tabs",
gtk_notebook_measure_tabs,
gtk_notebook_allocate_tabs,
- gtk_notebook_snapshot_tabs);
+ gtk_notebook_snapshot_tabs,
+ NULL);
gtk_widget_set_hexpand (priv->tabs_widget, TRUE);
gtk_container_add (GTK_CONTAINER (priv->header_widget), priv->tabs_widget);
else
sibling = priv->arrow_widget[ARROW_RIGHT_AFTER];
- page->tab_widget = gtk_gizmo_new ("tab", measure_tab, allocate_tab, NULL);
+ page->tab_widget = gtk_gizmo_new ("tab", measure_tab, allocate_tab, NULL, NULL);
g_object_set_data (G_OBJECT (page->tab_widget), "notebook", notebook);
gtk_widget_insert_before (page->tab_widget, priv->tabs_widget, sibling);
gtk_widget_add_controller (GTK_WIDGET (paned), GTK_EVENT_CONTROLLER (gesture));
priv->drag_gesture = gesture;
- priv->handle_widget = gtk_gizmo_new ("separator",
- NULL,
- NULL,
- gtk_paned_render_handle);
+ priv->handle_widget = gtk_gizmo_new ("separator", NULL, NULL, gtk_paned_render_handle, NULL);
gtk_widget_set_parent (priv->handle_widget, GTK_WIDGET (paned));
gtk_widget_set_cursor_from_name (priv->handle_widget, "col-resize");
}
G_CALLBACK (node_style_changed_cb), popover, 0);
g_object_unref (priv->arrow_node);
- priv->contents_widget = gtk_gizmo_new ("contents",
- measure_contents,
- allocate_contents,
- NULL);
+ priv->contents_widget = gtk_gizmo_new ("contents", measure_contents, allocate_contents, NULL, NULL);
gtk_widget_set_parent (priv->contents_widget, widget);
priv->trough_widget = gtk_gizmo_new ("trough",
NULL,
allocate_trough,
- snapshot_trough);
+ snapshot_trough,
+ NULL);
gtk_widget_set_parent (priv->trough_widget, GTK_WIDGET (pbar));
- priv->progress_widget = gtk_gizmo_new ("progress", NULL, NULL, NULL);
+ priv->progress_widget = gtk_gizmo_new ("progress", NULL, NULL, NULL, NULL);
gtk_widget_set_parent (priv->progress_widget, priv->trough_widget);
update_node_classes (pbar);
priv->trough_widget = gtk_gizmo_new ("trough",
gtk_range_measure_trough,
gtk_range_allocate_trough,
- gtk_range_render_trough);
+ gtk_range_render_trough,
+ NULL);
gtk_widget_set_parent (priv->trough_widget, GTK_WIDGET (range));
- priv->slider_widget = gtk_gizmo_new ("slider", NULL, NULL, NULL);
+ priv->slider_widget = gtk_gizmo_new ("slider", NULL, NULL, NULL, NULL);
gtk_widget_set_parent (priv->slider_widget, priv->trough_widget);
/* Note: Order is important here.
if (show_fill_level)
{
- priv->fill_widget = gtk_gizmo_new ("fill", NULL, NULL, NULL);
+ priv->fill_widget = gtk_gizmo_new ("fill", NULL, NULL, NULL, NULL);
gtk_widget_insert_after (priv->fill_widget, priv->trough_widget, NULL);
update_fill_position (range);
}
if (has_origin)
{
- priv->highlight_widget = gtk_gizmo_new ("highlight", NULL, NULL, NULL);
+ priv->highlight_widget = gtk_gizmo_new ("highlight", NULL, NULL, NULL, NULL);
gtk_widget_insert_before (priv->highlight_widget, priv->trough_widget, priv->slider_widget);
update_highlight_position (range);
priv->top_marks_widget = gtk_gizmo_new ("marks",
gtk_scale_measure_marks,
gtk_scale_allocate_marks,
+ NULL,
NULL);
gtk_widget_insert_after (priv->top_marks_widget,
priv->bottom_marks_widget = gtk_gizmo_new ("marks",
gtk_scale_measure_marks,
gtk_scale_allocate_marks,
+ NULL,
NULL);
gtk_widget_insert_before (priv->bottom_marks_widget,
marks_widget = priv->bottom_marks_widget;
}
- mark->widget = gtk_gizmo_new ("mark",
- gtk_scale_measure_mark,
- gtk_scale_allocate_mark,
- NULL);
+ mark->widget = gtk_gizmo_new ("mark", gtk_scale_measure_mark, gtk_scale_allocate_mark, NULL, NULL);
g_object_set_data (G_OBJECT (mark->widget), "mark", mark);
- mark->indicator_widget = gtk_gizmo_new ("indicator",
- NULL,
- NULL,
- NULL);
+ mark->indicator_widget = gtk_gizmo_new ("indicator", NULL, NULL, NULL, NULL);
gtk_widget_set_parent (mark->indicator_widget, mark->widget);
if (mark->markup && *mark->markup)
{
priv->off_image = gtk_image_new_from_icon_name ("switch-off-symbolic");
gtk_widget_set_parent (priv->off_image, GTK_WIDGET (self));
- priv->slider = gtk_gizmo_new ("slider", NULL, NULL, NULL);
+ priv->slider = gtk_gizmo_new ("slider", NULL, NULL, NULL, NULL);
gtk_widget_set_parent (priv->slider, GTK_WIDGET (self));
}
GtkStyleContext *context;
GtkEventController *controller;
- widget = gtk_gizmo_new (I_("cursor-handle"),
- NULL, NULL, snapshot_func);
+ widget = gtk_gizmo_new (I_("cursor-handle"), NULL, NULL, snapshot_func, NULL);
gtk_widget_set_direction (widget, priv->windows[pos].dir);